package logic

import (
	"context"
	"microdemo/internal/model/stockmodel"
	"microdemo/service/stock/internal/svc"
	"microdemo/service/stock/stock"
	"strconv"

	"github.com/zeromicro/go-zero/core/logx"
)

type GetStockLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewGetStockLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetStockLogic {
	return &GetStockLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

func (l *GetStockLogic) GetStock(in *stock.StockIdRequest) (*stock.StockResponse, error) {
	s := stockmodel.Stock{}
	// Take() 用于获取一条记录。注意：数据库没有数据将会报 “record not found” 的错误
	// Count() 用于获取匹配到的数据条数（非必须，可用于分页场景）
	take := l.svcCtx.DbEngine.Take(&s)
	if take.Error != nil {
		return nil, take.Error
	}
	return &stock.StockResponse{
		Id:   strconv.Itoa(int(s.ID)),
		Name: s.Name,
		Num:  int32(s.Num),
	}, nil
}

// 全部查询 / 分页查询
func (l *GetStockLogic) Getlist(pageSize, pageNum int) ([]*stock.StockResponse, error) {
	// 判断是否需要分页
	if pageSize == 0 {
		pageSize = -1
	}
	if pageNum == 0 {
		pageNum = -1
	}
	// 固定写法，记住就行。如果是不分页，那么偏移量为 -1
	offsetVal := (pageNum - 1) * pageSize
	if pageNum == -1 && pageSize == -1 {
		offsetVal = -1
	}
	// 查询结果总数
	var total int64
	// 查询结果集
	var dataList []*stock.StockResponse
	l.svcCtx.DbEngine.Model(dataList).Count(&total).Limit(pageSize).Offset(offsetVal).Find(&dataList)
	// 组装返回结果
	return dataList, nil
}
